package sv.gob.mh.dgii.model.pojos.cc;

import java.io.Serializable;
import sv.gob.mh.dgii.common.Utils;
import sv.gob.mh.dgii.model.DcRetAnual;
import sv.gob.mh.dgii.model.DcRetenidoDet;
import sv.gob.mh.dgii.model.EdDeclaraciones;
import sv.gob.mh.dgii.model.RcRuc;

public class CcRetencionesPojo implements Serializable, Cloneable {

    private DcRetAnual dcRetAnual;
    private DcRetenidoDet dcRetenidoDet;
    private RcRuc rcRuc;
    private EdDeclaraciones edDeclaraciones;
    private String Anio;
    private String cingreso;

    @Override
    public CcRetencionesPojo clone() {
        CcRetencionesPojo ret = new CcRetencionesPojo();
        ret.setAnio(Anio);
        ret.setCingreso(cingreso);

        DcRetAnual retAnual = null;
        if (dcRetAnual != null) {
            retAnual = new DcRetAnual();
            retAnual.setVmontoDeveng(dcRetAnual.getVmontoDeveng());
            retAnual.setVmontoRetenido(dcRetAnual.getVmontoRetenido());
        }
        ret.setDcRetAnual(retAnual);
        
        DcRetenidoDet retDet = null;
        if(dcRetenidoDet!=null){
            retDet = new DcRetenidoDet();
            retDet.setVmontoDeveng(dcRetenidoDet.getVmontoDeveng());
            retDet.setVmontoRetenido(dcRetenidoDet.getVmontoRetenido());
        }
        ret.setDcRetenidoDet(retDet);

        EdDeclaraciones declaracion = null;
        if (edDeclaraciones != null) {
            declaracion = new EdDeclaraciones();
            declaracion.setFpdeclaracion(edDeclaraciones.getFpdeclaracion());
        }
        ret.setEdDeclaraciones(declaracion);

        RcRuc ruc = null;
        if (rcRuc != null) {
            ruc = new RcRuc();
            ruc.setNit(rcRuc.getNit());
            ruc.setSnombres(rcRuc.getSnombres());
            ruc.setS1apeRasoc(rcRuc.getS1apeRasoc());
            ruc.setS2apeAbrev(rcRuc.getS2apeAbrev());
        }
        ret.setRcRuc(ruc);
        return ret;
    }

    public static CcRetencionesPojo voidObject() {
        CcRetencionesPojo ret = new CcRetencionesPojo();
        DcRetAnual retAnual = new DcRetAnual();
        retAnual.setVmontoDeveng(0D);
        retAnual.setVmontoRetenido(0D);
        ret.setDcRetAnual(retAnual);
        ret.setEdDeclaraciones(new EdDeclaraciones());
        ret.setRcRuc(new RcRuc());
        return ret;
    }

    /**
     * @return the dcRetAnual
     */
    public DcRetAnual getDcRetAnual() {
        return dcRetAnual;
    }

    /**
     * @param dcRetAnual the dcRetAnual to set
     */
    public void setDcRetAnual(DcRetAnual dcRetAnual) {
        this.dcRetAnual = dcRetAnual;
    }

    /**
     * @return the rcRuc
     */
    public RcRuc getRcRuc() {
        return rcRuc;
    }

    /**
     * @param rcRuc the rcRuc to set
     */
    public void setRcRuc(RcRuc rcRuc) {
        this.rcRuc = rcRuc;
    }

    /**
     * @return the edDeclaraciones
     */
    public EdDeclaraciones getEdDeclaraciones() {
        return edDeclaraciones;
    }

    /**
     * @param edDeclaraciones the edDeclaraciones to set
     */
    public void setEdDeclaraciones(EdDeclaraciones edDeclaraciones) {
        if (edDeclaraciones != null && edDeclaraciones.getFpdeclaracion() != null) {
            setAnio(Utils.getFormattedDate(edDeclaraciones.getFpdeclaracion(), "yyyy"));
        }
        this.edDeclaraciones = edDeclaraciones;
    }

    /**
     * @return the Anio
     */
    public String getAnio() {
        return Anio;
    }

    /**
     * @param Anio the Anio to set
     */
    public void setAnio(String Anio) {
        this.Anio = Anio;
    }

    /**
     * @return the cingreso
     */
    public String getCingreso() {
        return cingreso;
    }

    /**
     * @param cingreso the cingreso to set
     */
    public void setCingreso(String cingreso) {
        this.cingreso = cingreso;
    }

    /**
     * @return the dcRetenidoDet
     */
    public DcRetenidoDet getDcRetenidoDet() {
        return dcRetenidoDet;
    }

    /**
     * @param dcRetenidoDet the dcRetenidoDet to set
     */
    public void setDcRetenidoDet(DcRetenidoDet dcRetenidoDet) {
        this.dcRetenidoDet = dcRetenidoDet;
    }
}
